
        <html>
			<head>
			     <title>腾讯电脑管家TAV引擎逆向分析 - Variable</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/4931">http://drops.wooyun.org/tips/4931</a></h1>
				
      <p>
        <h1>0x00 背景</h1>

<hr />

<p>about me：写过外挂，做过破解，对电脑管家也有比较长时间的逆向分析积累，现在整理下投出来，求邀请码和WB。</p>

<p>TAV有自己的优势和特点的，比如杀毒之后能够还原一部分被病毒破坏的注册表和文件。另外它的内存查杀也不错，可以扫描内存、创建和病毒一样的互斥，防止病毒再次运行。</p>

<p>TAV相比其他杀毒软件还是有很多不足，最明显的缺陷是免杀比较简单，由于TAV引擎用的是字符串明文检测，很容易通过分析病毒库或者是MYCCL等进行黑盒免杀。另一方面，TAV的效率比较低，包括特征数据结构弱, 特征复用等方面的问题，后面会有详细分析。</p>

<p>值得一说的是，逆向TAV的特征库可以看到，外挂特征比病毒、后门特征都多，排在了特征数量的第二名，说腾讯电脑管家是“外挂杀手”一点都不夸张。盗号木马则是TAV另一个重点打击的对象，在特征库占比也不低。至于感染型病毒、后门、下载者、蠕虫、恶意脚本等其它类型的木马病毒，还需要OEM的小红伞引擎或者云引擎来补位，否则单靠TAV肯定是无能为力的。</p>

<!--more -->

<h1>0x01 结构与功能初析</h1>

<hr />

<p>引擎结构和功能如下。不难看出，TAV引擎属于基础的传统特征引擎。特征数量较少，与主流杀软相比还处于初级阶段。</p>

<p><img src="http://static.wooyun.org/20150213/2015021301312237197.png" alt="" /></p>

<h2>1. 引擎内部功能一览</h2>

<hr />

<h3>内存扫描</h3>

<p>匹配指定的进程和内存串，如果匹配到就终止进程</p>

<p><img src="http://static.wooyun.org/20150213/2015021301312370299.png" alt="" /></p>

<h3>匹配文件是否存在</h3>

<p><img src="http://static.wooyun.org/20150213/2015021301312324510.png" alt="" /></p>

<h3>创建一个和病毒相同的互斥体，防止病毒再次运行</h3>

<p><img src="http://static.wooyun.org/20150213/2015021301312494462.png" alt="" /></p>

<h3>内存清理</h3>

<p><img src="http://static.wooyun.org/20150213/2015021301312614681.png" alt="" /></p>

<h3>解包</h3>

<p><img src="http://static.wooyun.org/20150213/2015021301312669078.png" alt="" /></p>

<h3>字符串多模式匹配</h3>

<p><img src="http://static.wooyun.org/20150213/2015021301312723227.png" alt="" />  </p>

<h3>虚拟机:</h3>

<p><img src="http://static.wooyun.org/20150213/2015021301312926806.png" alt="" /></p>

<p>模拟了ntdll、kernel32、gdi32、user32、advapi32、shell32、wsock32、ole32、oleaut32、msvcrt、version、urlmon这几个系统DLL</p>

<p>对于不常用的API采用同一个函数统一处理： <img src="http://static.wooyun.org/20150213/2015021301313015091.png" alt="" /></p>

<p>对于关键函数，使用单独的模拟代码实现： <img src="http://static.wooyun.org/20150213/2015021301313154979.png" alt="" /></p>

<h2>2. 病毒库分析：</h2>

<hr />

<h3>A).病毒库算法:</h3>

<p>只是简单的ZLIB。</p>

<p><img src="http://static.wooyun.org/20150213/2015021301313161327.png" alt="" /></p>

<p>解密后内容如下：</p>

<p><img src="http://static.wooyun.org/20150213/2015021301313275178.png" alt="" /></p>

<h3>B). 病毒库结构:</h3>

<p>virinfo.def：名称表，包括壳名、包名、特征名 <code>c++
structVirInfo
{
    DWORD dwID;
    BYTE btLength;
    char VirName[btLength];
 };</code></p>

<h3>C). 病毒库规模:</h3>

<p>特征数量整体非常少，以PE为例只有8135条特征。分布见下图。从特征分布和类型来看，TAV主要查杀目标为外挂、盗号程序。对于动辄百万级规模的恶意程序家族其实只覆盖了冰山一角，远远达不到一个杀毒引擎的程度，仅仅停留在外挂、盗号专杀的层面。更让人捉急的是TAV维护了大量的脱壳解包特征，直接暴露了开发者框架设计方面的缺陷。与此形成鲜明对比的是国际知名的卡巴和BD引擎，通常在一个“膨胀”的过程中，维护较多的同家族特征，随后再在“收缩”过程中，用一条obj通杀，显得章法自如、张弛有度。</p>

<p><img src="http://static.wooyun.org/20150213/2015021301313341192.png" alt="" /></p>

<h3>D). 病毒库更新：</h3>

<p>病毒库的更新有2种方式：</p>

<p>1 直接更新扩展名为.def的病毒库，适用于查杀现有引擎可以支持的木马和病毒。</p>

<p>2 更新替换tpktt.dll，适用于现有引擎无法解决的复杂样本，将特征和查杀方法通过分析员写代码实现，然后整个引擎更新替换，类似于专杀方式。</p>

<h1>0x02 PE查杀过程逆向分析：</h1>

<hr />

<h2>1.病毒库描述：</h2>

<hr />

<p>virpeXX.def：（PE库）</p>

<pre><code>#!c++
struct VirpeHeader
{
　WORD wUnknown;
　DWORD dwHeadSize;
　DWORD dwSize;
　WORD wTable1Count;
    WORD wdMaskCount;//表示共有多少条PE特征
    WORD wdUnknown4;
    DWORD dwTable1Off;
    DWORD dwTable2Off;
    DWORD dwTable3Off;
    DWORD dwTable4Off;
    DWORD dwTable5Off;//传统特征
    DWORD dwTable6Off //多模式特征
};
</code></pre>

<hr />

<pre><code>#!c++
struct Sig //特征结构
{
    DWORD dwRecordID;//特征ID，用于关联特征名
    DWORD dwOffset;//特征偏移，用于定位病毒代码具体位置
    BYTE btLength;//特征长度，用于扫描匹配病毒代码长度
    BYTE btOffsetBaseAddress;//特征基地址，用于定位特征起始位置
BYTE btVirMask[btLength];//病毒特征具体内容
};
</code></pre>

<h2>2. 静态查杀方式：</h2>

<hr />

<h3>a). 二进制全文匹配。（二进制特征存放在virpe01.def库解密后的tbl5中）</h3>

<p>将数十字节的病毒代码二进制，记录在病毒库中，与待检测样本进行全文匹配。</p>

<h3>b). 多模匹配。（多模特征存放在tbl6中）</h3>

<p>将恶意程序的明显字符串信息提取出，记录在病毒库中，与待检测样本进行多模匹配。</p>

<h2>3. 静态扫描流程：</h2>

<hr />

<p>见下图 <img src="http://static.wooyun.org/20150213/2015021301313463841.png" alt="" /></p>

<h2>4. 设计缺陷分析：</h2>

<hr />

<p>传统杀软最容易出现的几个问题：效率低、体积庞大、对抗门槛低。这几个问题在TAV身上尤为明显。只是现阶段TAV特征数量极低，暂时未大规模展现而已。</p>

<h3>a) 体积大。</h3>

<p>现有的查杀方式设计会导致病毒库臃肿，庞大的二进制数据和字符串数据记录在病毒库中，随着特征增加，病毒库体积会急速膨胀。在同等特征数量的情况下，TAV病毒库将会比卡巴、BD等杀软大上数十倍。</p>

<h3>b) 效率低。</h3>

<p>逐个匹配特征的方式，会随着病毒库膨胀而使得效率变得越来越低。卡巴、BD等杀软为解决此问题，设计出了多索引的方式，只有在最后一层才匹配几个特征，效率非常高。</p>

<h3>c) 对抗门槛低。</h3>

<p>匹配代码在内存中明文存在。</p>

<p><img src="http://static.wooyun.org/20150213/2015021301313553446.png" alt="" /></p>

<p>使得无论木马作者通过分析病毒库来免杀还是通过MYCCL等黑客工具进行黑盒免杀都极为容易。</p>

<h3>d) 特征无复用。</h3>

<p>下图为TAV的TOP50特征，可见出现大量重复二进制。特征之间基本无复用。</p>

<p><img src="http://static.wooyun.org/20150213/2015021301313525664.png" alt="" /></p>

<p><strong>例：Virus.Win32.DiskGen</strong></p>

<p>以此家族为例，描述TAV设计缺陷导致的效率问题。</p>

<p>TAV查杀Virus.Win32.DiskGen病毒从a变种到最后的an变种，多次匹配了这条特征：</p>

<pre><code>18 8B 8E 30 0A 00 00 03 C8 40 40 8A 11 F6 D2 88 11 3B 05 3F 3F 3F 3F 7C
</code></pre>

<p><img src="http://static.wooyun.org/20150213/2015021301313669773.png" alt="" /></p>

<p>特征含义是病毒自解密代码</p>

<p><img src="http://static.wooyun.org/20150213/2015021301313741299.png" alt="" /></p>

<p>尽管使用了索引复用，但并没有优化。从病毒库中可以看到，这条相同的特征出现了20次。也就意味着，为了匹配这个家族的所有变种，当前待扫描文件需要扫描20次才行。因为目前TAV特征只有数千条，效率低下的问题感受不明显，倘若哪天TAV特征达到竞品平均水平的数百万条，不难想象扫描一个文件将会是何等的慢。</p>

<h1>0x03 其他类型分析：</h1>

<hr />

<p>virscrXX.def：脚本库，直接存储的字符串，用于挂马的查杀。为了避免误报自身内存，采用了异或的方式，将特征加载到内存中。</p>

<p><img src="http://static.wooyun.org/20150213/2015021301313862353.png" alt="" /></p>

<p>virdexXX.def：安卓特征库</p>

<p><img src="http://static.wooyun.org/20150213/2015021301313939932.png" alt="" /></p>

<p>virsrcXX.def：脚本库，用于查杀HTML\JAVA\PDF\OLE\JS\NSIS</p>

<p><img src="http://static.wooyun.org/20150213/2015021301313937362.png" alt="" /></p>

<p>vircmpinfo.def：壳、编译器识别</p>

<p><img src="http://static.wooyun.org/20150213/2015021301314042932.png" alt="" /></p>

<p><img src="http://static.wooyun.org/20150213/2015021301314165956.png" alt="" /></p>

<p> </p>

<h1>0x04 实战对抗</h1>

<hr />

<h2>1.TAV虚拟机对抗</h2>

<hr />

<p>当文件被加UPX壳后，会调用GetProcAddress动态获得API地址，TAV可以模拟GetProcAddress的结果，并且可以执行到下一条EIP所在位置，使得程序能够正常模拟下去，而不至于触发异常返回。</p>

<p><img src="http://static.wooyun.org/20150213/2015021301314119054.png" alt="" /></p>

<p>文件的真实调试结果：</p>

<p><img src="http://static.wooyun.org/20150213/2015021301314440004.png" alt="" /></p>

<p>不过TAV的虚拟执行能力比较弱，比较适用于对压缩壳进行脱壳，如常见的UPX壳，而对于动态行为查杀却无能为力。</p>

<p>比如某个非常简单的Downloader木马，作者调用了URLDownloadToFileW下载一个木马，然后调用WinExec执行木马。整个过程非常简单，只用到2个Windows API，并且没有额外的代码来对抗虚拟机，而TAV引擎却无法查杀：</p>

<p><img src="http://static.wooyun.org/20150213/2015021301314559912.png" alt="" /></p>

<p><img src="http://static.wooyun.org/20150213/2015021301314640068.jpg" alt="" /></p>

<p><img src="http://static.wooyun.org/20150213/2015021301314683354.jpg" alt="" /></p>

<p>同样的样本，扫描对比国外知名杀软，则可以通过虚拟机动态检出</p>

<p><img src="http://static.wooyun.org/20150213/2015021301314748669.png" alt="" /></p>

<h2>2.MYCCL黑盒对抗：</h2>

<hr />

<p>以某盗QQ木马测试。</p>

<p><img src="http://static.wooyun.org/20150213/2015021301314845627.png" alt="" /></p>

<p>特征码地址如下：</p>

<p><img src="http://static.wooyun.org/20150213/2015021301315081606.png" alt="" /></p>

<p>使用C32ASM查看特征码：</p>

<p><img src="http://static.wooyun.org/20150213/2015021301315075866.png" alt="" /></p>

<p>随便改改：</p>

<p><img src="http://static.wooyun.org/20150213/2015021301315115926.png" alt="" /></p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          